#include"Thread.hpp"
#include<unordered_map>
#include<memory>




// int main()
// {
// 	ThreadModule::Thread t([]{
// 		while(1)
// 		{
// 			std::cout << "hello world" << std::endl;
// 			sleep(1);
// 		}
// 	});

// 	t.Start();
// 	std::cout << t.Name() << " is running" << std::endl;
// 	sleep(5);

// 	t.Stop();
// 	std::cout << "Stop thread" << t.Name() << std::endl;

// 	t.Join();
// 	std::cout << "Join thread" << t.Name() << std::endl;

// 	return 0;
// }





// 创建多线程

// #define NUM 10

// // 智能指针管理线程对象，可自动处理内存释放，避免内存泄漏。
// using thread_ptr_t = std::shared_ptr<ThreadModule::Thread> ;

// int main()
// {
// 	std::unordered_map<std::string , thread_ptr_t> threads;

// 	for(int i = 0;i < NUM;i++)
// 	{
// 		thread_ptr_t t = std::make_shared<ThreadModule::Thread>([](){
// 		while(1)
// 		{
// 			std::cout << "hello world" << std::endl;
// 			sleep(1);
// 		}
// 		});

// 		threads[t->Name()] = t;
// 	}

// 	for(auto& thread : threads)
// 	{
// 		thread.second->Start();
// 	}

// 	for(auto& thread : threads)
// 	{
// 		thread.second->Join();
// 	}

// }








#define NUM 10

class threadData
{
public:
	int max;
	int start;
};

void Count1(threadData td)
{
	for(int i = td.start;i < td.max;i++)
	{
		std::cout << "i == " << i << std::endl;
		sleep(1);
	}
}

void Count2(int max)
{
	for(int i = 0;i < max;i++)
	{
		std::cout << "i == " << i << std::endl;
		sleep(1);
	}
}
int main()
{
	threadData td;
	td.max = 60,td.start = 50;
	ThreadModule::Thread<threadData> t(Count1,td);

	//ThreadModule::Thread<int> t(Count2,10);


	t.Start();

	t.Join();

}